<?php
require 'SiteController.php';
class PcategoryController extends SiteController{
	public function init(){
		parent::init();
	}
	public function indexAction(){
		$this->view->headLink()->appendStylesheet(PUBLIC_URL.'/skins/default/css/category.css');
		$this->view->headScript()->appendFile(PUBLIC_URL.'/skins/default/js/category.js');
		//lấy giá trị các thuộc tính lọc
		$request = $this->getRequest();
		$man_id = $request->getParam('man_id');
		$cat_id = $request->getParam('cat_id'); //tham số này có sẵn url
		$filterValueIDs = explode(';', $request->getParam('filter'));
		$psort = $request->getParam("psort");
		
		//lấy ra cat hiện tại
		
		$pCategory = $this->_pcategoryModel->getCategoryByID($cat_id);
		if(isset($pCategory->page_title) && $pCategory->page_title != ""){
	    	$this->view->headTitle($pCategory->page_title);
	    }else{
	    	$this->view->headTitle($pCategory->name);
	    }
	    if(isset($pCategory->page_description) && $pCategory->page_description != ""){
	    		$this->view->headMeta()->appendName("description", $pCategory->page_description);
	    }else{
			$this->view->headMeta("description", "Sieu thi Cuong Phu chuyen cung cap cac loai may in chinh hang voi gia ca re nhat tren thi truong, may in hp 1132, May in HP 1102, may in mau hp, May in Canon 2900, May in da nang Canon");
		}
		if(isset($pCategory["tag"]) && $pCategory["tag"] != "") {
				$this->view->headMeta()->appendName("keywords", $pCategory->tag);
		}else{
			$this->view->headMeta("keywords", "may in hp 1132, May in HP 1102, may in mau hp, May in Canon 2900, May in da nang Canon, cung cap may in, may in");
		}
		$this->view->pCategory = $pCategory;
		//lấy bộ lọc theo hãng sản xuất
		$arrManFilters  = array();
		//do manufactuter đã được lấy từ SiteController
		if(isset($man_id) && is_numeric($man_id)){
			$currentMan = $this->_manufactureModel->getManufacturerByID($man_id); 
		}
		if(isset($currentMan)){
			$this->view->currentMan= $currentMan;
			$this->view->currentManPostNumber = $this->_productModel->getProductNumberByFilter($currentMan->id, $cat_id, $filterValueIDs);
		}else{
			foreach ($this->view->mans as $man){
				try{
					$arrManFilters[] = array("id" => $man->id, "name" => $man->name, "productNumber" => $this->_productModel->getProductNumberByFilter($man->id, $cat_id, $filterValueIDs) );
				}catch (Exception $ex){
					//echo $ex->getMessage();
				}
			}
			$this->view->arrManFilters = $arrManFilters;
		}
		
		//lấy các bộ lọc còn lại
		$arrFilterValueSets = array();
		//lấy bộ lọc
		$arrFilters = $pCategory->findManyToManyRowset("Model_Filter", "Model_CategoryFilter");
		foreach ($arrFilters as $filter){
			$arrFilterValues = array();
			$filterValues = $filter->findDependentRowset("Model_FilterValue");
			//kiểm tra xem các giá trị lọc hiện thời có trong các giá trị lọc của bộ lọc này không
			//đồng thời lấy về mã của giá trị lọc có xuất hiện
			$currentFilterValueID = $this->checkCurrentFilter($filterValues, $filterValueIDs);
			//nếu không có thì duyệt tất cả các giá trị lọc của bộ lọc này
			if( $currentFilterValueID == 0){
				foreach ($filterValues as $filterValue){
					$arrFilterValues[] = array(
											"id"=>$filterValue->id, 
											"text"=>$filterValue->text, 
											"numberProduct" => $this->_productModel->getProductNumberByFilter($currentMan->id, $cat_id, array($filterValue->id)));
				}
				$arrFilterValueSets[$filter->name] = $arrFilterValues;
			//nếu có thì chỉ lấy thông tin giá trị lọc đó ra thôi
			}else{
				$currentFilterValue = $this->_filterValueModel->getFilterValueByID($currentFilterValueID);
				$arrFilterValueSets[$filter->name] = array(
											"id"=>$currentFilterValue->id, 
											"text"=>$currentFilterValue->text, 
											"numberProduct" => $this->_productModel->getProductNumberByFilter($currentMan->id, $cat_id, array($currentFilterValue->id))
										);
			}
			
		}
		$this->view->arrFilterValueSets = $arrFilterValueSets;
		
		//bắt đầu lấy các sản phẩm
		$arrProducts = $this->_productModel->filterProduct($man_id, $cat_id, $filterValueIDs, $psort);
		//Đưa danh sách product vào Zend_Paginator để bắt đầu phân trang
        $paginator = Zend_Paginator::factory($arrProducts);
        //Số product trên một trang
        $paginator->setItemCountPerPage(9);
        //Số trang được hiện ra để click
        $paginator->setPageRange(5);
        //Lấy trang hiện tại
        $currentPage = $this->getRequest()->getParam('page',1);
        //vi page lấy về có dạng _p1 nên phải bỏ chữ p đi
        $currentPage = substr($currentPage, 2);
        $paginator->setCurrentPageNumber($currentPage);
        
        //Truyền dữ liệu ra view
        $this->view->arrProducts=$paginator;
	}
	private function checkCurrentFilter($arrFilterValues, $arrFilterValueParams){
		foreach ($arrFilterValues as $filterValue){
			if(in_array($filterValue->id, $arrFilterValueParams)){
				return $filterValue->id;
			}
		}
		return 0;
	}
	
	public function searchAction(){
		$this->view->headLink()->appendStylesheet(PUBLIC_URL.'/skins/default/css/category.css');
		$this->view->headScript()->appendFile(PUBLIC_URL.'/skins/default/js/category.js');
    	//lấy keywork
    	$keyword = $this->getRequest()->getParam('keyword');
    	$psort = $this->getRequest()->getParam('psort');

    	if(isset($keyword) && $keyword != ''){
    		//bắt đầu lấy các sản phẩm
			$arrProducts = $this->_productModel->getProductsByKeyword($keyword, $psort);
			//Đưa danh sách product vào Zend_Paginator để bắt đầu phân trang
	        $paginator = Zend_Paginator::factory($arrProducts);
	        //Số product trên một trang
	        $paginator->setItemCountPerPage(9);
	        //Số trang được hiện ra để click
	        $paginator->setPageRange(5);
	        //Lấy trang hiện tại
	        $currentPage = $this->getRequest()->getParam('page',1);
	        //vi page lấy về có dạng _p1 nên phải bỏ chữ p đi
	        $currentPage = substr($currentPage, 2);
	        $paginator->setCurrentPageNumber($currentPage);	
	        //Truyền dữ liệu ra view
       		$this->view->arrProducts=$paginator;
    	}
    }
    public function manAction(){
    	try{
	    	$this->view->headLink()->appendStylesheet(PUBLIC_URL.'/skins/default/css/category.css');
			$this->view->headScript()->appendFile(PUBLIC_URL.'/skins/default/js/category.js');
			//lấy giá trị các thuộc tính lọc
			$request = $this->getRequest();
			$man_name = $request->getParam('man_name');
			
    		if(isset($man_name) && $man_name != ""){
				$currentMan = $this->_manufactureModel->getManufacturerByName($man_name);
			}
			//var_dump($currentMan);
			$cat_slug = $request->getParam('cat_slug'); //tham số này có sẵn url
			//lấy ra cat hiện tại
			if(isset($cat_slug) && $cat_slug != ""){
				$pCategory = $this->_pcategoryModel->getCategoryBySlug($cat_slug);
				$cat_id = $pCategory->id;
				$this->view->pCategory = $pCategory;
				
			}
			
			$filterValueIDs = explode(';', $request->getParam('filter'));
			$psort = $request->getParam("psort");
			//lấy bộ lọc theo hãng sản xuất
			$arrManFilters  = array();
			//do manufactuter đã được lấy từ SiteController
			
			
			
			
			if(isset($currentMan)){
				if(isset($currentMan->page_title) && $currentMan->page_title != ""){
			    	$this->view->headTitle($currentMan->page_title);
			    }else{
			    	$this->view->headTitle($currentMan->name);
			    }
			    if(isset($currentMan->page_description) && $currentMan->page_description != ""){
			    		$this->view->headMeta()->appendName("description", $currentMan->page_description);
			    }
				if(isset($currentMan["tag"]) && $currentMan["tag"] != "") {
						$this->view->headMeta()->appendName("keywords", $currentMan->tag);
				}
				$this->view->currentMan= $currentMan;
				$this->view->currentManProductNumber = $this->_productModel->getProductNumberByFilter($currentMan->id, $cat_id, $filterValueIDs);
				$this->view->currentCategoryProductNumber = $this->_productModel->getProductNumberByFilter($currentMan->id, $pCategory->id, $filterValueIDs);
				$arrManCategories = array();
				$arrManLv1Categories = $currentMan->findManyToManyRowset("Model_PCategory", "Model_ManCat");
				if (count($arrManLv1Categories)){
					foreach ($arrManLv1Categories as $manLv1Category){
						$arrManCategories[] = array("id"=>$manLv1Category->id, "name" => $manLv1Category->name, "level"=>$manLv1Category->level, "slug"=> $manLv1Category->slug, "numberOfProduct" =>  $this->_productModel->getProductNumberByFilter($currentMan->id, $manLv1Category->id, $filterValueIDs));
						$arrManLv2Categories = $this->_pcategoryModel->getCategoryLv2ByIDLv1($manLv1Category->id);
						if(count($arrManLv2Categories)){
							foreach ($arrManLv2Categories as $manLv2Category){
								$arrManCategories[] = array("id"=>$manLv2Category->id, "name" => $manLv2Category->name, "level"=>$manLv2Category->level, "slug"=> $manLv2Category->slug, "numberOfProduct" =>  $this->_productModel->getProductNumberByFilter($currentMan->id, $manLv2Category->id, $filterValueIDs));
								
							}
						}
					}
				}
				$this->view->arrManCategories = $arrManCategories;
			}
			
			//lấy các bộ lọc còn lại
			$arrFilterValueSets = array();
			//lấy bộ lọc
			if(isset($pCategory)){
				$arrFilters = $pCategory->findManyToManyRowset("Model_Filter", "Model_CategoryFilter");
				foreach ($arrFilters as $filter){
				$arrFilterValues = array();
				$filterValues = $filter->findDependentRowset("Model_FilterValue");
				//kiểm tra xem các giá trị lọc hiện thời có trong các giá trị lọc của bộ lọc này không
				//đồng thời lấy về mã của giá trị lọc có xuất hiện
				$currentFilterValueID = $this->checkCurrentFilter($filterValues, $filterValueIDs);
				//nếu không có thì duyệt tất cả các giá trị lọc của bộ lọc này
				if( $currentFilterValueID == 0){
					foreach ($filterValues as $filterValue){
						$arrFilterValues[] = array(
												"id"=>$filterValue->id, 
												"text"=>$filterValue->text, 
												"numberProduct" => $this->_productModel->getProductNumberByFilter($currentMan->id, $cat_id, array($filterValue->id)));
					}
					$arrFilterValueSets[$filter->name] = $arrFilterValues;
				//nếu có thì chỉ lấy thông tin giá trị lọc đó ra thôi
				}else{
					$currentFilterValue = $this->_filterValueModel->getFilterValueByID($currentFilterValueID);
					$arrFilterValueSets[$filter->name] = array(
												"id"=>$currentFilterValue->id, 
												"text"=>$currentFilterValue->text, 
												"numberProduct" => $this->_productModel->getProductNumberByFilter($currentMan->id, $cat_id, array($currentFilterValue->id))
											);
				}
				
			}
			$this->view->arrFilterValueSets = $arrFilterValueSets;
			}else{
				$arrFilters  = null;
			}
			
			
			//bắt đầu lấy các sản phẩm
			$arrProducts = $this->_productModel->filterProduct($currentMan->id, $cat_id, $filterValueIDs, $psort);
			//Đưa danh sách product vào Zend_Paginator để bắt đầu phân trang
	        $paginator = Zend_Paginator::factory($arrProducts);
	        //Số product trên một trang
	        $paginator->setItemCountPerPage(9);
	        //Số trang được hiện ra để click
	        $paginator->setPageRange(5);
	        //Lấy trang hiện tại
	        $currentPage = $this->getRequest()->getParam('page',1);
	        //vi page lấy về có dạng _p1 nên phải bỏ chữ p đi
	        $currentPage = substr($currentPage, 2);
	        $paginator->setCurrentPageNumber($currentPage);
	        //Truyền dữ liệu ra view
	        $this->view->arrProducts=$paginator;
    	}catch(Exception $ex){
    		echo $ex->getMessage();
    		
    		
    	}

    }
}
?>